// =======================================================================
// 
//       Filename:  Element.hpp
// 
//    Description:  
// 
//        Version:  1.0
//        Created:  20.04.2010 00:37:38
//       Revision:  none
//       Compiler:  g++
// 
//         Author:  Dominik 'domachine' Burgdörfer (-), dominik.burgdoerfer@googlemail.com
//        Company:  -
// 
// =======================================================================

#ifndef  ELEMENT_INC
#define  ELEMENT_INC
#include "../types/object.hpp"
#include <fstream>
#include <boost/filesystem.hpp>

namespace webplodder {
    namespace elements {
        class Element : public types::Object 
        {
            public:
                enum Type {
                    TEXT,
                    COMMAND,
                    VAR,
                    SCRIPT,
                    STACK
                };

                Element(Element::Type type);

                Element(Element& parent, Type type);

                virtual ~Element();

                virtual Type elementType() const;

                virtual int line() const;

                virtual void setLine(int line);

                virtual boost::filesystem::path sourcePath() const;

            protected:
                Element* m_parent;
                Type mType;
                int mLine;
        };
    }
}

bool operator<<(char& ch, webplodder::elements::Element& element);

    webplodder::elements::Element& operator>>(char ch, 
                                  webplodder::elements::Element& element);
#endif   // ----- #ifndef ELEMENT_INC  -----

